/*
 * Created by Jaren at 2021/10/29 15:45
 */

import 'package:binary/binary.dart';
import 'package:inmotion_protocol/common/product_model.dart';
import 'package:inmotion_protocol/common/product_version.dart';
import 'package:inmotion_protocol/lorin/bean/base/settings.dart';

abstract class ScooterSettings extends AbsSettings {
  static const int ridingModeEco = 0; // 骑行模式-经济模式
  static const int ridingModeNormal = 1; // 骑行模式-正常模式
  static const int ridingModeSport = 2; // 骑行模式-运动模式
  static const int ridingModeAssist = 3; // 骑行模式-行人模式
  static const int ridingModeX = 4; // 骑行模式-极限模式
  static const int ridingModeP = 5; // 骑行模式-Park模式

  static const int motorFront = 0; // 前电机
  static const int motorRear = 1; // 后电机

  static const int calibrationHandleAcc = 0; // 把手-油门把手
  static const int calibrationHandleBrake = 1; // 把手-刹车把手
  static const int calibrationHandleIMU = 2; // IMU(用作自动转向灯等)

  static const int speedUnitKmph = 0; // 车辆速度单位，Km/h
  static const int speedUnitMph = 1; // 车辆速度单位，mph

  static const int lightOff = 0; // 前灯关
  static const int lightOn = 0xFF; // 前灯开

  Uint4 zeroStartupState = Uint4.zero; // 零速启动开关
  Uint4 cruiseState = Uint4.zero; // 定速巡航开关
  Uint4 speedUnit = Uint4.zero; // 仪表显示的速度单位
  RidingMode ridingMode = RidingMode.eco; // 车辆模式
  Uint4 lockMode = Uint4.zero; // 锁车

  Uint4 safeSpeedLimitState = Uint4.zero; // 安全速度限制开关状态

  Uint8 accelerateForce = Uint8.zero; // 加速力度，范围0-100
  Uint8 brakeForce = Uint8.zero; // 刹车力度，范围0-100

  Uint16 limitSpeed = Uint16.zero; // 限速

  ScooterSettings(ProductModel model, VersionWrapper version) : super(model, version);

  RidingMode toRidingMode(int mode) {
    switch (mode) {
      case 1:
        return RidingMode.normal;
      case 2:
        return RidingMode.sport;
      case 3:
        return RidingMode.assist;
      case 0:
      default:
        return RidingMode.eco;
    }
  }
}

/// 骑行模式
enum RidingMode {
  eco, // 经济模式
  normal, // 普通模式
  sport, // 运动模式
  assist, // 助推/行人模式
  x, // 极限模式
  p, // Park模式
}
